home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / WriteLn.c < prev    next >
C/C++ Source or Header  |  1995-03-20  |  3KB  |  142 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     WriteLn.c
  6.  
  7.     DESCRIPTION
  8.     Write a line of text to a specified _Filehandle_
  9.  
  10.     NOTES
  11.     Kickstart 2.0+ required
  12.     compiles w/ SAS/C v6.51
  13.  
  14.     BUGS
  15.     none known
  16.  
  17.     TODO
  18.  
  19.     EXAMPLES
  20.     > set fh `Open T:writetest WRITE`
  21.     > WriteLn $fh This is a test
  22.     > Close $fh
  23.     > cat T:writetest
  24.       This is a test
  25.  
  26.     SEE ALSO
  27.  
  28.     INDEX
  29.  
  30.     HISTORY
  31.     21-02-95 b_noll created
  32.     21-02-95 b_noll added version/format-prefix/offset
  33.     20-03-95 b_noll added args diagnostics
  34.     20-03-95 b_noll fixed an error - writeln in fact never worked
  35.  
  36.     AUTHOR
  37.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  38.     b_noll@informatik.uni-kl.de
  39.  
  40. ******************************************************************************/
  41.  
  42. /**************************************
  43.         Includes
  44. **************************************/
  45.  
  46. #ifndef   EXEC_LIBRARIES_H
  47. # include <exec/libraries.h>
  48. #endif /* EXEC_LIBRARIES_H */
  49.  
  50. #ifndef   CLIB_EXEC_PROTOS_H
  51. # include <clib/exec_protos.h>
  52. #endif /* CLIB_EXEC_PROTOS_H */
  53.  
  54. #ifndef   DOS_DOS_H
  55. # include <dos/dos.h>
  56. #endif /* DOS_DOS_H */
  57.  
  58. #ifndef   CLIB_DOS_PROTOS_H
  59. # include <clib/dos_protos.h>
  60. #endif /* CLIB_DOS_PROTOS_H */
  61.  
  62. #include <proto/dos.h>
  63. #include <proto/exec.h>
  64.  
  65. /**************************************
  66.      Defines & Structures
  67. **************************************/
  68.  
  69. #ifndef ABSEXECBASE
  70. #define ABSEXECBASE ((struct ExecBase **)4L)
  71. #endif
  72.  
  73. struct _arg {
  74. /* ******************** USER FORMAT ******************** */
  75. #define FORMAT "FILEHANDLE/N/A,NOLINE/S,TEXT/F"
  76.  
  77.     BPTR  *filehandle;
  78.     ULONG  noline;
  79.     STRPTR text;
  80.  
  81. /* ******************** USER FORMAT ******************** */
  82. }; /* struct _argv */
  83.  
  84. #define MAXPATHLEN 256
  85. #define MAXLINELEN 256
  86.  
  87. #define VERSIONPREFIX    "\0$VER: "
  88. #define VERSIONOFFSET    0
  89. #define FORMATPREFIX    "\0$ARG: "
  90. #define FORMATOFFSET    7
  91.  
  92. /**************************************
  93.         Implementation
  94. **************************************/
  95.  
  96. long _main (void)
  97. {
  98.     const char* version = VERSIONPREFIX "WriteLn 1.1 " __AMIGADATE__  + VERSIONOFFSET;
  99.     long retval = RETURN_FAIL;
  100.     struct ExecBase*SysBase = *ABSEXECBASE;
  101.     struct Library* DOSBase;
  102.  
  103.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  104.     struct _arg argv = { 0 };
  105.     APTR   args;
  106.     retval     = RETURN_ERROR;
  107.     if (args = (void*)ReadArgs(FORMATPREFIX FORMAT + FORMATOFFSET, (LONG*)&argv, NULL)) {
  108.  
  109. /* ******************** USER BODY ******************** */
  110.  
  111.         if (argv.filehandle && *argv.filehandle) {
  112.  
  113.         /* MISSING: CHECKREGISTER(*argv.filehandle); */
  114.  
  115.         if (FPrintf(*argv.filehandle, argv.noline? "%s": "%s\n", argv.text) >= 0) {
  116.             if (!argv.noline || Flush (*argv.filehandle))
  117.             retval = RETURN_OK;
  118.         } else {
  119.             //PrintFault(IoErr(), "WRITE");
  120.         } /* if */
  121.         } else {
  122.         //PrintFault(ERROR_BAD_NUMBER, "WRITE");
  123.         SetIoErr(ERROR_BAD_NUMBER);
  124.         } /* if */
  125.  
  126. /* ******************** USER BODY ******************** */
  127.         FreeArgs (args);
  128.     } /* if */
  129.  
  130.     if (retval > RETURN_WARN)
  131.         PrintFault(IoErr(), "Write");
  132.  
  133.     CloseLibrary (DOSBase);
  134.     } /* if */
  135.     return (retval);
  136. } /* _main */
  137.  
  138. /******************************************************************************
  139. *****  END WriteLn.c
  140. ******************************************************************************/
  141.  
  142.